<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Promise  </title>
</head>
<body>
  <script>
    // 定义一个Promise函数 biaobai 传入两个参数一个延迟时间delay，一个是表白的文本内容str
    function biaobai(delay=1000,str="我爱你"){
      // 返回一个promise对象
      return new Promise((resolve,reject)=>{
        // 延迟delay时间后执行resolve函数
        setTimeout(()=>{
          resolve(str)
        },delay)
      })
    }
    // 4. Promise.all 参数是一个数组，数组中的每一项都是一个promise对象
    // 5. Promise.all 返回的也是一个promise对象 通过then方法可以获取到最终的结果
    // 6. map映射方法返回的是一个新的数组
    // var list = [biaobai(2000,"我很中意你"),biaobai(5000,"请问你的孩子以后能跟我姓吗？"),biaobai(3000,"我们家祖坟风水极佳，百年后一起呀")];
    var mylist = [{delay:2000,str:"我很中意你"},{delay:5000,str:"请问你的孩子以后能跟我姓吗？"},{delay:3000,str:"我们家祖坟风水极佳，百年后一起呀"}]
    // 把数组中的每一项都转换成promise对象
    var list = mylist.map(item=>{
      return biaobai(item.delay,item.str)
    })
    var start = Date.now();
    Promise.all(list)
    .then(res=>{
      console.log("最终的结果",res )
      console.log(Date.now()-start)
    })


    // 定义一个async函数done
    /* async function done(){
      var str1 = await biaobai(2000,"我很中意你");
      console.log(str1)
      var str2 = await biaobai(5000,"请问你的孩子以后能跟我姓吗？");
      console.log(str2)
      var str3 = await biaobai(3000,"我们家祖坟风水极佳，百年后一起呀");
      console.log(str3)
      return [str1,str2,str3]
  
    }
    done()
    .then(res=>{
      console.log("最终的结果",res)
    }) */
    // 4. await 会等待后面的prmise对象执行完毕后 ，才会向下执行
    // 3. await 后面跟的是一个promise对象，如果不是promise对象，会被转换成一个立即resolve的promise对象
    // 2. async 通常和awiat一起使用
    // 1. async 装饰的函数返回的是一个promise对象
    // async function done(){
    //   return  "abc"
    // }
    // var  p  = done();
    // // 检测result的类型
    // console.log(p);
    // p.then(res=>{
    //   console.log(res,"promise的结果");
    // })
    
    
  </script>
</body>
</html>